﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LeetCode
{
    public class RomanToInteger : IRun
    {
        // 罗马字符转数字   
        public void Run()
        {

            int i = Method1("MDCXL");
        }

        public int Method1(string s1)
        {
            // 特殊情况
            // I 可以放在 V (5) 和 X (10) 的左边，来表示 4 和 9。
            // X 可以放在 L(50) 和 C(100) 的左边，来表示 40 和 90。 
            // C 可以放在 D(500) 和 M(1000) 的左边，来表示 400 和 900。

            // 分析特殊情况可得：
            // IV = -1 +5；VI = +5 +1；
            // XC = -10 +100；CX = +100 +10；
            // 以此分析：
            // 若双罗马字符，左侧代表的数值小于右侧的，做减法；
            // 若双罗马字符，左侧代表的数值大于右侧的，做加法；


            Dictionary<char, int> Roman = new Dictionary<char, int>()
            {
                {'I',1 },
                {'V',5 },
                {'X',10 },
                {'L',50 },
                {'C',100 },
                {'D',500 },
                {'M',1000 },
            };

            int _Result = 0;
            for (int i = 0; i < s1.Length; i++)
            {
                if (i < s1.Length - 1 && Roman[s1[i]] < Roman[s1[i + 1]])
                {
                    _Result -= Roman[s1[i]];
                }
                else
                {
                    _Result += Roman[s1[i]];
                }
            }
            return _Result;
        }
    }
}
